<?php 
/**
 * 我的SESSION
 * 现只提供database类型
 */

abstract class Session{
	/**
	 * 当前Session实例
	 */
	public static $session = null;
	
	/**
	 * Session过期时间
	 */
	protected $_max_life_time = 1800;
	
	/**
	 * 创建Session实例,返回session类
	 * 单例模式
	 * @access public
	 * @param string $session_class
	 *        	Session类名
	 * @return Object 返回Session实例
	 *
	 */
	public static function create($session_class) {
		if (self::$session === null) {
			self::$session = new $session_class ();
		}
		return self::$session;
	}
	
	/**
	 * 启动session
	 *
	 * 调用该方法开启Session，开启成功后，您就可以直接像往常一样操作$_SESSION变量了。
	 *
	 * @author Garbin
	 * @access public
	 * @return void
	 *
	 */
	public function start()
	{
		session_set_save_handler(array(&$this, 'open'),
				array(&$this, 'close'),
				array(&$this, 'read'),
				array(&$this, 'write'),
				array(&$this, 'destroy_handler'),
				array(&$this, 'gc'));
		session_start();
	}
	
	/**
	 * 设置过期时间
	 *
	 * 设置Session的过期时间，以秒为单位
	 *
	 * @author Garbin
	 * @access public
	 * @param int $time
	 *        	过期时间(如：1800表示半个小时)
	 * @return void
	 */
	public function setMaxLifeTime($time) {
		$this->_max_life_time = intval ( $time );
	}
	
	/**
	 * 销毁Session
	 *
	 * 销毁当前Session
	 *
	 * @author Garbin
	 * @access public
	 * @return void
	 *
	 */
	public function destroy() {
		session_destroy ();
	}
	
	/**
	 * 系统回调函数Open
	 *
	 * session_set_save_handler的回调函数open，关于更多信息参看php手册
	 *
	 * @author Garbin
	 * @param string $save_path
	 *        	session保存路径
	 * @param string $sess_name
	 *        	session名
	 * @return bool
	 */
	public function open($save_path, $sess_name) {
		return true;
	}
	
	/**
	 * 系统回调函数close
	 *
	 * session_set_save_handler的回调函数close，关于更多信息参看php手册
	 *
	 * @author Garbin
	 * @return bool
	 */
	public function close() {
		return true;
	}
	
	/**
	 * 系统回调函数read
	 *
	 * session_set_save_handler的回调函数read，关于更多信息参看php手册
	 *
	 * @author Garbin
	 * @param string $id
	 *        	session_id
	 * @return string 返回保存的session数据
	 */
	public function read($id) {
		return '';
	}
	
	/**
	 * 系统回调函数write
	 *
	 * session_set_save_handler的回调函数write，关于更多信息参看php手册
	 *
	 * @author Garbin
	 * @param string $id
	 *        	session_id
	 * @param string $data
	 *        	session数据
	 * @return bool
	 */
	public function write($id, $data) {
		return true;
	}
	
	/**
	 * 系统回调函数destroy，销毁session时调用
	 *
	 * session_set_save_handler的回调函数destroy，关于更多信息参看php手册
	 *
	 * @author Garbin
	 * @param string $id
	 *        	session_id
	 * @return bool
	 */
	public function destroy_handler($id) {
		return true;
	}
	
	/**
	 * 系统回调函数gc，垃圾回收
	 *
	 * session_set_save_handler的回调函数gc，关于更多信息参看php手册
	 *
	 * @author Garbin
	 * @param int $max_life_time
	 *        	系统设置的session过期时间，在这里不使用它，使用自定义的过期时间
	 * @return bool
	 */
	public function gc($max_life_time) {
		return true;
	}
}

?>